/*
     Estado        Metodo
     P          agregarItem - Diego
     ?P?          confirmarCarrito - Diego. Falta probar bien.
 */

package gestores.pagina;

import dal.ArticuloDAL;

import dal.CarritoDAL;
import dal.ClienteDAL;

import excepciones.AvwException;


import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;

import java.util.Iterator;

import java.util.logging.Level;
import java.util.logging.Logger;


import negocio.ArticuloCampania;
import negocio.ArticuloWeb;
import negocio.CampaniaWeb;
import negocio.CarritoArticuloWeb;
import negocio.CarritoWeb;
import negocio.Cliente;
import util.Email;
import util.Recurso;



import util.Utiles;

public class GestorCarrito {
    
    static final Logger logger = Utiles.iniciarLogger("GestorCarrito", false);
    
    /**
     * Obtiene los siguientes datos del articulo agregado al carrito:
     * artCodigo, artNombre, arcPrecioDescuento y artCostoEnvio.
     * @return HashMap.
     * @param String codigo_campania.
     * @param String codigo_articulo.
     * */
    public static HashMap agregarItem(String codigo_campania,
        String codigo_articulo) throws AvwException, NullPointerException {
        HashMap articuloHash = new HashMap();
        ArticuloCampania articuloCampania = new ArticuloCampania();
        
        articuloCampania =
            ArticuloDAL.obtenerArticuloCampaniaCarrito(new CampaniaWeb(codigo_campania),
            new ArticuloWeb(codigo_articulo));
        
        articuloHash.put("artCodigo",
                articuloCampania.getArcArticulo().getArtCodigo());
        articuloHash.put("artNombre",
                Utiles.formatearTexto(articuloCampania.getArcArticulo().getArtNombre()));
        articuloHash.put("artPrecioDescuento",
                articuloCampania.getArcPrecioDescuento());
        articuloHash.put("artPrecioDescuentoBruto",
                articuloCampania.getArcPrecioDescuentoBruto());
        articuloHash.put("artCostoEnvio",
                articuloCampania.getArcArticulo().getArtCostoEnvio());
        articuloHash.put("artCostoEnvioBruto",
                articuloCampania.getArcArticulo().getArtCostoEnvioBruto());
        
        return articuloHash;
    }
    
    /**
     * Confirma carrito
     * @param String codigo_campania
     * @param String codigo_cliente
     * @param ArrayList<HashMap> articulos. Donde cada hashMap contiene
     * el codigo de los articulos ('artCodigo') y la cantidad ('cantidad').
     * */
    public static String confirmarCarrito(String codigo_campania, String codigo_cliente, 
        String nombre_cliente, String alias_cliente, String horario, String telefono_cliente, 
            ArrayList<HashMap> articulos) throws AvwException{
        
        CarritoWeb carrito = new CarritoWeb();
        Cliente cliente = ClienteDAL.obtenerCliente(new Cliente(codigo_cliente));
        carrito.setCrwCliente(cliente);
        carrito.setCrwCampania(new CampaniaWeb(codigo_campania));
        Double importe = 0.0;
        
        ArrayList<CarritoArticuloWeb> articulosWeb = new ArrayList<CarritoArticuloWeb>();
        
        for (HashMap articuloHash: articulos){
            CarritoArticuloWeb carritoArticulo = new CarritoArticuloWeb();
            ArticuloCampania articuloCampania =  ArticuloDAL.obtenerArticuloCampaniaCarrito(
                    new CampaniaWeb(codigo_campania), new ArticuloWeb(Utiles.noNull(articuloHash.get("artCodigo"))));
            
            carritoArticulo.setCawCantidad(Integer.parseInt(
                    articuloHash.get("cantidad").toString()));
            carritoArticulo.setCawArticuloCampania(articuloCampania);
            carritoArticulo.setCawPrecio(Double.parseDouble(
                    String.valueOf(articuloHash.get("artPrecioDescuento"))));
            
            importe = importe + Float.parseFloat(Utiles.noNull(articuloHash.get("artCostoEnvioBruto")))
                    + Float.parseFloat(Utiles.noNull(articuloHash.get("artPrecioDescuentoBruto")))
                    * carritoArticulo.getCawCantidad();
            //Este importe es el importe bruto total del carrito
            articulosWeb.add(carritoArticulo);
        }
        
        carrito.setCrwCarritoArticulo(articulosWeb);
        carrito.setCrwImporte(importe); //seteo el importe del carrito
        Email email = new Email();
        StringBuilder mensaje = new StringBuilder();
        Recurso r = new Recurso("mail.properties");
        
        
        
        
        String titulo = "Confirmar Carrito";
        String comnumero="";
        
        try {
            comnumero = CarritoDAL.insertarCarrito(carrito);
            
            mensaje.append("El cliente: ");
            mensaje.append(alias_cliente);
            mensaje.append("\n con el usuario web: ");
            mensaje.append(cliente.getCliCodigo());
            mensaje.append(" y el nombre de usuario: ");
            mensaje.append(cliente.getCliNombre());
            mensaje.append("\n quiere que lo llamen por el Telefono, ");
            mensaje.append(" por el numero: ");
            mensaje.append(telefono_cliente);
            mensaje.append("\n a las: ");
            mensaje.append(horario);
            mensaje.append("\n tiene intenciones de comprar los siguientes articulos: ");
            for (HashMap articuloHash: articulos){
                mensaje.append("\n");
                mensaje.append(" codigo: " + articuloHash.get("artCodigo")+ " nombre: " +
                    articuloHash.get("artNombre") + " cantidad: " + articuloHash.get("cantidad"));
            }
            mensaje.append("\n el codigo del comprobante es: ");
            mensaje.append(comnumero);
            email.enviarEmailSimple(cliente.getCliEmail(),r.obtenerPropiedad("mailVentas"),
                cliente.getCliNombre(),"", titulo, mensaje.toString());
            //Le mando un mensaje al cliente de manera de confirmarle la llegada de su carrito 
            mensaje.setLength(0);
            mensaje.append("ETERCOR esta procesando su compra, lo llamaremos en la brevedad");
            titulo = "VENTAS ETERCOR";
            email.enviarEmailSimple(r.obtenerPropiedad("mailVentas"),cliente.getCliEmail(),
                "",cliente.getCliNombre(),titulo,mensaje.toString());
        } catch (AvwException e) {
            logger.log(Level.SEVERE,e.getMensaje(),e);
        }
        return comnumero;
        
    }
}
